home *** CD-ROM | disk | FTP | other *** search
/ Aminet 44 / Aminet 44 (2001)(GTI - Schatztruhe)[!][Aug 2001].iso / Aminet / dev / src / Rkm_asm.lha / Assembly_Codes / OS_Sources / Exec / Signal.s < prev    next >
Text File  |  1992-09-02  |  6KB  |  337 lines

  1.  
  2.  * This code shows how to Signal another task by sending that task bit 12
  3.  * (SIGBREAKF_CTRL_C).
  4.  
  5.     INCDIR    WORK:Include/
  6.  
  7.     INCLUDE    exec/exec_lib.i
  8.     INCLUDE    exec/memory.i
  9.     INCLUDE    intuition/intuition_lib.i
  10.     INCLUDE    intuition/intuition.i
  11.     INCLUDE dos/dos_lib.i
  12.     INCLUDE dos/dos.i
  13.     INCLUDE dos/dosextens.i
  14.     INCLUDE    workbench/icon_lib.i
  15.     INCLUDE    workbench/startup.i
  16.     INCLUDE    workbench/workbench.i
  17.  
  18. LIB_VER        EQU    39
  19. TRUE        EQU    -1
  20. FALSE        EQU    0
  21.  
  22.     lea    membuf(pc),a4
  23.  
  24.  * membuf (Memory Buffer) is set-up so that this code can be
  25.  * position-independant. The memory buffer contains the following
  26.  * addresses and their data:
  27.  *
  28.  *   0  Startup Return Message
  29.  *   4  _DOSBase
  30.  *   8  _IntuitionBase
  31.  *  12 _IconBase
  32.  *  16 Old Directory from CurrentDir()
  33.  *  20 Disk Object from GetDiskObject()
  34.  *  24 Argument addresses (30*4)
  35.  * 144 ReadArgs() return value
  36.  * 148 Task address
  37.  * 152 _GfxBase
  38.  * 156
  39.  * 160
  40.  * 164
  41.  * 165
  42.  * 166 Memory Buffer (12 bytes)
  43.  * 178
  44.  * 182 value 1 (for ToolType/CLI result)
  45.  * 183 value 2 (for ToolType/CLI result)
  46.  * 184
  47.  
  48.  * The Startup code below reads two CLI Arguments/WB ToolTypes as an example
  49.  * of how to programme CLI Arguments/WB ToolTypes.
  50.  *
  51.  * Note: The CLI Arguments/WB ToolTypes are done after Startup and Library
  52.  *       opening, so there is no use for the A0 pointer (which contains
  53.  *       pr_CLI).
  54.  
  55.     suba.l    a1,a1
  56.     move.l    4.w,a6
  57.     jsr    _LVOFindTask(a6)
  58.     tst.l    d0
  59.     beq    exit
  60.     move.l    d0,a5
  61.     move.l    a5,148(a4)
  62.     tst.l    pr_CLI(a5)        ; Was this task started from CLI?
  63.     bne.s    _main            ; Yes.
  64.     lea    pr_MsgPort(a5),a0    ; No. From Workbench.
  65.     jsr    _LVOWaitPort(a6)
  66.     lea    pr_MsgPort(a5),a0
  67.     jsr    _LVOGetMsg(a6)
  68.     move.l    d0,(a4)            ; D0 = A WBStartup Message.
  69.  
  70. _main
  71.     moveq    #LIB_VER,d0
  72.         lea     dos_name(pc),a1
  73.     move.l    4.w,a6
  74.         jsr    _LVOOpenLibrary(a6)
  75.         move.l  d0,4(a4)
  76.         beq     quit
  77.  
  78.         moveq    #LIB_VER,d0
  79.         lea     int_name(pc),a1
  80.         jsr    _LVOOpenLibrary(a6)
  81.         move.l  d0,8(a4)
  82.         beq     cl_dos
  83.  
  84.         moveq    #LIB_VER,d0
  85.         lea     gfx_name(pc),a1
  86.         jsr    _LVOOpenLibrary(a6)
  87.         move.l  d0,152(a4)
  88.         beq     cl_int
  89.  
  90.         moveq    #LIB_VER,d0
  91.         lea     icon_name(pc),a1
  92.         jsr    _LVOOpenLibrary(a6)
  93.         move.l  d0,12(a4)
  94.         beq     cl_gfx
  95.  
  96.  * Check the ToolTypes/CLI Arguments.
  97.  
  98.         move.l    (a4),a0
  99.         tst.l   a0
  100.         beq    fromcli
  101.     move.l    sm_ArgList(a0),a5
  102.         move.l  (a5),d1
  103.     beq    zero_args
  104.     move.l    4(a4),a6
  105.     jsr    _LVOCurrentDir(a6)
  106.         move.l  d0,16(a4)
  107.         move.l    wa_Name(a5),a0
  108.     move.l    12(a4),a6
  109.     jsr    _LVOGetDiskObject(a6)
  110.         move.l  d0,20(a4)
  111.         beq     zero_args
  112.         move.l    d0,a5
  113.         move.l  do_ToolTypes(a5),a5
  114.  
  115.     move.l    a5,a0
  116.         lea    ftstg0(pc),a1
  117.         jsr    _LVOFindToolType(a6)
  118.     tst.l    d0
  119.         beq.s    tt1
  120.     move.l    d0,a3
  121.     move.l    a3,a0
  122.     lea    mtstg0(pc),a1
  123.     jsr    _LVOMatchToolValue(a6)
  124.     tst.l    d0
  125.     beq.s    tto1
  126.     clr.b    182(a4)
  127.     bra.s    tt1
  128. tto1    move.l    a3,a0
  129.     lea    mtstg1(pc),a1
  130.     jsr    _LVOMatchToolValue(a6)
  131.     tst.l    d0
  132.     beq.s    tt1
  133.     move.b    #1,182(a4)
  134. tt1    move.l    a5,a0
  135.         lea    ftstg1(pc),a1
  136.         jsr    _LVOFindToolType(a6)
  137.     tst.l    d0
  138.         beq.s    tt2
  139.     move.l    d0,a3
  140.     move.l    a3,a0
  141.     lea    mtstg2(pc),a1
  142.     jsr    _LVOMatchToolValue(a6)
  143.     tst.l    d0
  144.     beq.s    tto2
  145.     clr.b    183(a4)
  146.     bra.s    tt2
  147. tto2    move.l    a3,a0
  148.     lea    mtstg3(pc),a1
  149.     jsr    _LVOMatchToolValue(a6)
  150.     tst.l    d0
  151.     beq.s    tto3
  152.     move.b    #1,183(a4)
  153.     bra.s    tt2
  154. tto3    move.l    a3,a0
  155.     lea    mtstg4(pc),a1
  156.     jsr    _LVOMatchToolValue(a6)
  157.     tst.l    d0
  158.     beq.s    tto4
  159.     move.b    #2,183(a4)
  160.     bra.s    tt2
  161. tto4    move.l    a3,a0
  162.     lea    mtstg5(pc),a1
  163.     jsr    _LVOMatchToolValue(a6)
  164.     tst.l    d0
  165.     beq.s    tt2
  166.     move.b    #3,183(a4)
  167. tt2
  168.     nop
  169.  
  170.  
  171. free_diskobj
  172.         move.l    20(a4),a0
  173.         jsr    _LVOFreeDiskObject(a6)
  174.     bra    zero_args
  175.  
  176. fromcli    lea    template(pc),a0
  177.     move.l  a0,d1
  178.         lea    24(a4),a5
  179.         move.l  a5,d2
  180.         moveq    #0,d3
  181.     move.l    4(a4),a6
  182.         jsr    _LVOReadArgs(a6)
  183.         move.l  d0,144(a4)
  184.         beq    zero_args
  185.  
  186.     move.l    (a5),a0
  187.     lea    mtstg0(pc),a1
  188.     bsr    cmpbyte
  189.     tst.l    d0
  190.     bne.s    cao1
  191.     clr.b    182(a4)
  192.     bra.s    ca1
  193. cao1    move.l    (a5),a0
  194.     lea    mtstg1(pc),a1
  195.     bsr    cmpbyte
  196.     tst.l    d0
  197.     bne.s    ca1
  198.     move.b    #1,182(a4)
  199. ca1    move.l    4(a5),a0
  200.     lea    mtstg2(pc),a1
  201.     bsr    cmpbyte
  202.     tst.l    d0
  203.     bne.s    cao2
  204.     clr.b    183(a4)
  205.     bra.s    ca2
  206. cao2    move.l    4(a5),a0
  207.     lea    mtstg3(pc),a1
  208.     bsr    cmpbyte
  209.     tst.l    d0
  210.     bne.s    cao3
  211.     move.b    #1,183(a4)
  212.     bra.s    ca2
  213. cao3    move.l    4(a5),a0
  214.     lea    mtstg4(pc),a1
  215.     bsr    cmpbyte
  216.     tst.l    d0
  217.     bne.s    cao4
  218.     move.b    #2,183(a4)
  219.     bra.s    ca2
  220. cao4    move.l    4(a5),a0
  221.     lea    mtstg5(pc),a1
  222.     bsr    cmpbyte
  223.     tst.l    d0
  224.     bne.s    ca2
  225.     move.b    #3,183(a4)
  226. ca2
  227.     nop
  228.  
  229.  
  230. free_cliargs
  231.         move.l    144(a4),d1
  232.         jsr    _LVOFreeArgs(a6)
  233.  
  234. zero_args
  235.  
  236.     lea    sendto_name(pc),a1
  237.     move.l    4.w,a6
  238.     jsr    _LVOFindTask(a6)
  239.     tst.l    d0
  240.     beq.s    cl_icon
  241.  
  242.     move.l    d0,a1
  243.     move.l    #SIGBREAKF_CTRL_C,d0
  244.     jsr    _LVOSignal(a6)
  245.     move.l    d0,d3            ; Signals received by other task.
  246.  
  247.     suba.l    a0,a0
  248.     move.l    8(a4),a6
  249.     jsr    _LVODisplayBeep(a6)
  250.  
  251.  
  252. cl_icon    move.l  12(a4),a1
  253.     move.l    4.w,a6
  254.         jsr    _LVOCloseLibrary(a6)
  255.  
  256. cl_gfx    move.l  152(a4),a1
  257.     move.l    4.w,a6
  258.         jsr    _LVOCloseLibrary(a6)
  259.  
  260. cl_int    move.l  8(a4),a1
  261.     move.l    4.w,a6
  262.         jsr    _LVOCloseLibrary(a6)
  263.  
  264. cl_dos    move.l  4(a4),a1
  265.     move.l    4.w,a6
  266.         jsr    _LVOCloseLibrary(a6)
  267.  
  268. quit    move.l  #8000000,d0
  269.         moveq    #MEMF_CHIP,d1
  270.     move.l    4.w,a6
  271.     jsr    _LVOAllocMem(a6)
  272.     tst.l    d0
  273.     beq.s    cleanup
  274.     move.l    d0,a1
  275.     move.l    #8000000,d0
  276.     jsr    _LVOFreeMem(a6)
  277. cleanup    tst.l    (a4)
  278.     beq.s    exit            ; Exit - Task was started from CLI.
  279.     move.l    4.w,a6
  280.     jsr    _LVOForbid(a6)
  281.     move.l    (a4),a1            ; Reply to the WB Startup Message and
  282.     jsr    _LVOReplyMsg(a6)    ; Exit - Task was started from WB.
  283. exit    moveq    #0,d0
  284.     rts
  285.  
  286.  
  287.  * Sub-Routines.
  288.  
  289. cmpbyte    move.b  (a0)+,d0
  290.         move.b  (a1)+,d1
  291.         tst.b   d0
  292.         beq.s   byte0
  293.         cmp.b   d1,d0
  294.         beq.s   cmpbyte
  295. byte0    sub.b   d1,d0
  296.         ext.w   d0
  297.         ext.l   d0
  298.         rts
  299.  
  300. findlen    move.l    a0,a1
  301.     moveq    #0,d0
  302. not_nil    tst.b    (a1)+
  303.     beq.s    gotlen
  304.     addq.l    #1,d0
  305.     bra.s    not_nil
  306. gotlen    rts
  307.  
  308.  
  309.  * String Variables.
  310.  
  311. int_name    dc.b    'intuition.library',0
  312. dos_name    dc.b    'dos.library',0
  313. icon_name       dc.b    'icon.library',0,0
  314. gfx_name    dc.b    'graphics.library',0
  315. mtstg0        dc.b    'ARG_ONE',0
  316. mtstg1        dc.b    'ARG_TWO',0
  317. mtstg2        dc.b    'ARG_THREE',0
  318. mtstg3        dc.b    'ARG_FOUR',0,0
  319. mtstg4        dc.b    'ARG_FIVE',0,0
  320. mtstg5        dc.b    'ARG_SIX',0
  321. ftstg0          dc.b    'TOOLTYPE_ONE',0,0
  322. ftstg1          dc.b    'TOOLTYPE_TWO',0,0
  323. template    dc.b    'KEYWORD_ONE/K,KEYWORD_TWO/K',0
  324. sendto_name    dc.b    'wait',0,0
  325.  
  326.  
  327.  * Buffer Variables.
  328.  
  329. membuf        dcb.b    200,0
  330.  
  331.  
  332.     SECTION    VERSION,DATA
  333.  
  334.     dc.b    '$VER: Signal.s V1.01 (22.4.2001)',0
  335.  
  336.  
  337.     END